﻿using Cherry.Agile.Configuration;
using Cherry.Agile.Core;
using Cherry.Agile.Security;
using Cherry.Agile.UI.Framework.Security;
using System;
using System.IO;
using System.Web;
using Microsoft.Practices.Unity;

namespace Cherry.Agile.UI.Framework
{
    public class CommonHttpModule : IHttpModule
    {
        static readonly object _sync = new object();

        /// <summary>
        /// 您将需要在网站的 Web.config 文件中配置此模块
        /// 并向 IIS 注册它，然后才能使用它。有关详细信息，
        /// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007
        /// </summary>
        #region IHttpModule Members

        public void Dispose()
        {
            //此处放置清除代码。
        }

        public void Init(HttpApplication context)
        {
            lock(_sync)
            {
                var path = AppDomain.CurrentDomain.BaseDirectory;
                var file = Path.Combine(path, "aigile.config");

                if (File.Exists(file))
                {
                    var config = ConfigManager.Create(file);
                    Container.Setup(config);
                    Cherry.Agile.Configuration.AgileConfiguration.Setup(config);
                }

                Container.Current.RegisterInstance<ITokenProvider>(new FormTokenProvider());
                var provider = new AuthrizationCacheStorage();
                Container.Current.BuildUp(provider.GetType(), provider);
                Container.Current.RegisterInstance<ICacheStorage>(provider);
            }
            // 下面是如何处理 LogRequest 事件并为其 
            // 提供自定义日志记录实现的示例
            context.LogRequest += new EventHandler(OnLogRequest);
        }

        #endregion

        public void OnLogRequest(Object source, EventArgs e)
        {
            //可以在此处放置自定义日志记录逻辑
        }
    }
}
